--
-- Correccion en el query de determinacion del ejercicio. Fallaba cuando hay varios ejercicios que se superponen
--

ALTER TABLE public.art
    ADD COLUMN maxcantporlote numeric default 0.00;

COMMENT ON COLUMN public.art.maxcantporlote
    IS 'Indica si el articulo registra lotes, cual es la cantidad máxima por lote aceptada. 0 significa sin restriccion.';



--

CREATE OR REPLACE FUNCTION public.tg_artm_ins_restricciones()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$

BEGIN
  PERFORM stock.verificar_cant_tomada(NEW.IdArt, NEW.Cant, NEW.OrigenIdArtM);
  IF NEW.NROLOTE IS NOT NULL THEN 
     IF EXISTS (SELECT * FROM ART WHERE ART.ID = NEW.idart AND maxcantporlote > 0.00 AND NEW.CANT > maxcantporlote)
	 THEN
	 RAISE EXCEPTION 'El siguiente articulo excede la cantidad maxima permitida por lote, verifique: %s', 
	       (SELECT COD || ' ' || nombre FROM ART WHERE ART.ID = NEW.IDART);
     END IF;
  END IF;
  RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.tg_artm_ins_restricciones()
    OWNER TO abacouser;

COMMENT ON FUNCTION public.tg_artm_ins_restricciones()
    IS 'Cuerpo del trigger de artm que verifica el cumplimiento de diferentes reglas del negocio al insertar.';

--

CREATE OR REPLACE FUNCTION public.tg_artm_upd_restricciones()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF
AS $BODY$
BEGIN
  PERFORM stock.verificar_grafo_stock(OLD.Id, OLD.IdArt, NEW.IdArt,
                                              OLD.OrigenIdArtM, NEW.OrigenIdArtM,
                                              OLD.OrigenCodStkEst, NEW.OrigenCodStkEst,
                                              OLD.CodStkEst, NEW.CodStkEst,
                                              OLD.Cant, NEW.Cant);
  IF NEW.NROLOTE IS NOT NULL THEN 
     IF EXISTS (SELECT * FROM ART WHERE ART.ID = NEW.idart AND maxcantporlote > 0.00 AND NEW.CANT > maxcantporlote)
	 THEN
	 RAISE EXCEPTION 'El siguiente articulo excede la cantidad maxima permitida por lote, verifique: %s', 
	       (SELECT COD || ' ' || nombre FROM ART WHERE ART.ID = NEW.IDART);
     END IF;
  END IF;
  RETURN NEW;
END;
$BODY$;

ALTER FUNCTION public.tg_artm_upd_restricciones()
    OWNER TO abacouser;

COMMENT ON FUNCTION public.tg_artm_upd_restricciones()
    IS 'Cuerpo del trigger de artm que verifica el cumplimiento de diferentes reglas del negocio al modificar.';


--
SELECT aaVersion('507.00', '506.00');
--




